perm filename A98.TEX[106,RWF] blob
sn#834451 filedate 1987-02-11 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 \magnification\magstephalf
C00010 ENDMK
Cā;
\magnification\magstephalf
\input macro.tex
\def\today{\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi
\space\number\day, \number\year}
\baselineskip 14pt
\rm
\line{\sevenrm a98.tex[106,phy] \today\hfill}
\font\rmn=cmr9
\bigskip
{\baselineskip0pt
{\obeylines\obeyspaces\let =\ \tt
***** *****
****** *****
******* *****
******** *****
********* *****
***************
***** *********
***** ********
***** *******
***** ******
***** *****
}}
How can we design a program to print the letter ``{\tt N}'' as shown above?
First, let's print out a block of {\tt A}'s the same size as the~{\tt N}.
(Later we will change the program so that some of the {\tt A}'s become
{\tt *}'s and some become blank spaces.)
\medskip
{\obeylines\obeyspaces\let =\ \tt
FOR R:=1 TO 11 DO
BEGIN
FOR C:=1 TO 15 DO
WRITE('A');
WRITELN
END
}
\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA
}}
%\vfill\eject
\smallskip
Now we change the program so that everything in columns 6 to 15 is a~{\tt B},
rather than an~{\tt A}. We do this by changing {\tt WRITE('A')} to
\smallskip
{\obeylines\obeyspaces\let =\ \tt
IF C<=5 THEN WRITE('A') ELSE WRITE('B')
}
\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
AAAAABBBBBBBBBB
}}
\vfill\eject
\medskip\noindent
Again, we change the {\tt WRITE('B')} to
\smallskip
{\obeylines\obeyspaces\let =\ \tt
IF C>=11 THEN WRITE('B') ELSE WRITE('C')
}
\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
AAAAACCCCCBBBBB
}}
\medskip\noindent
The whole program is now
\smallskip
{\obeylines\obeyspaces\let =\ \tt
FOR R:=1 TO 11 DO
BEGIN
FOR C:=1 TO 15 DO
IF C<=5 THEN WRITE('A')
ELSE IF C>=11 THEN WRITE('B')
ELSE WRITE('C')
WRITELN
END
}
\medskip\noindent
Now we change {\tt WRITE('C')} to
\smallskip
{\obeylines\obeyspaces\let =\ \tt
IF C>=5+R THEN WRITE('C') ELSE WRITE('D')
}
\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
AAAAACCCCCBBBBB
AAAAADCCCCBBBBB
AAAAADDCCCBBBBB
AAAAADDDCCBBBBB
AAAAADDDDCBBBBB
AAAAADDDDDBBBBB
AAAAADDDDDBBBBB
AAAAADDDDDBBBBB
AAAAADDDDDBBBBB
AAAAADDDDDBBBBB
AAAAADDDDDBBBBB
}}
{\rmn
{\narrower\smallskip\noindent
{\bf Drill:} Why {\tt C>=5+R}?
\smallskip}
}
\smallskip\noindent
and finally change {\tt WRITE('D')} to
\smallskip
{\obeylines\obeyspaces\let =\ \tt
IF C>=R THEN WRITE('D') ELSE WRITE('E')
}
\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
AAAAACCCCCBBBBB
AAAAADCCCCBBBBB
AAAAADDCCCBBBBB
AAAAADDDCCBBBBB
AAAAADDDDCBBBBB
AAAAADDDDDBBBBB
AAAAAEDDDDBBBBB
AAAAAEEDDDBBBBB
AAAAAEEEDDBBBBB
AAAAAEEEEDBBBBB
AAAAAEEEEEBBBBB
}}
\vfill\eject
\smallskip\noindent
If we change the character constants `{\tt A}', `{\tt D}', and `{\tt B}' to
asterisks, and `{\tt C}', `{\tt E}', to blanks, the program is
\smallskip
{\obeylines\obeyspaces\let =\ \tt
PROGRAM NF(OUTPUT);
VAR R,C: INTEGER:
BEGIN
FOR R:=1 TO 11 DO
BEGIN
FOR C:=1 TO 15 DO
IF C<=5 THEN WRITE('*')
ELSE IF C>=11 THEN WRITE('*')
ELSE IF C>=5+R THEN WRITE(' ')
ELSE IF C>=1+R THEN WRITE('*')
ELSE WRITE(' ');
WRITELN
END
END.
}
{\rmn
{\narrower\smallskip\noindent
{\bf Exercise:} Design an algorithm to print a letter `{\tt Z}'.
\smallskip}
}
\bigskip
\line{\copyright 1984 Robert W. Floyd;
First draft (not published) March 28, 1984\hfil}
%revised: Date; subsequently revised.\hfill}
\bye